<?php
/**
 * SimpleAdministration
 *
 * Класс предназначен для проверки пользовательских прав
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
class SimpleAdministration {

  /**
   * Метод проверяет права на работу с материалом по типу сущности и его идентификатору
   *
   * @param mixed $essenceType
   * @param integer $essenceId
   * @return boolean
   */
  public static function isAvailableMaterial($essenceType, $essenceId) {
  	Service_Debug::setDebug();
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    if ($objUser->getField('is_admin')) return true;
    if (!Service_Essence::isEssenceTypeCorrect($essenceType)) return false;
    $objDB = Service_Database::instance();
    switch ($essenceType) {
    	case 'our_hotel_photo':
    	$stmt = " SELECT `" . $essenceType . "`.`ID_" . $essenceType . "`
	  						FROM `" .  $essenceType . "`
	  						INNER JOIN `our_hotel` USING(`ID_our_hotel`)
	  						WHERE `" .  $essenceType . "`.`ID_" .  $essenceType . "` = " . intval($essenceId) . "
	  						AND `our_hotel`.`ID_hotel_owner` = " . intval($objUser->id);    		
    		break;
    	case 'our_room_photo':
    	$stmt = " SELECT `" . $essenceType . "`.`ID_" . $essenceType . "`
	  						FROM `" .  $essenceType . "`
	  						INNER JOIN `our_room` USING(`ID_our_room`)
	  						INNER JOIN `our_hotel` USING(`ID_our_hotel`)
	  						WHERE `" .  $essenceType . "`.`ID_" .  $essenceType . "` = " . intval($essenceId) . "
	  						AND `our_hotel`.`ID_hotel_owner` = " . intval($objUser->id);    		
    		break;
    	default:
    	$stmt = " SELECT `" . $essenceType . "`.`ID_" . $essenceType . "`
	  						FROM `" .  $essenceType . "`
	  						WHERE `" .  $essenceType . "`.`ID_" .  $essenceType . "` = " . intval($essenceId) . "
	  						AND `" .  $essenceType . "`.`ID_user` = " . intval($objUser->id);
    }
  	return $objDB->isRecordExist($stmt);
  }

  /**
   * Метод проверяет, является ли пользователь автором или админом
   *
   * @param integer $authorId
   * @return boolean
   */
  public static function isAuthorOrAdmin($authorId) {
  	Service_Debug::setDebug();
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    if ($objUser->getField('is_admin')) return true;
    if ($authorId == $objUser->id) return true;
    else return false;
  }
  
  /**
   * Метод проверяет, является ли пользователь автором
   *
   * @param integer $authorId
   * @return boolean
   */
  public static function isAuthor($authorId) {
  	Service_Debug::setDebug();
  	$objSession = User_Session::instance();
  	if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
  	$objUser = $objSession->getUser();
  	if ($authorId == $objUser->id) return true;
  	else return false;
  }

    /**
   * Метод проверяет, является ли пользователь админом
   *
   * @return boolean
   */
  public static function isAdmin() {
  	Service_Debug::setDebug();
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    if ($objUser->getField('is_admin')) return true;
    else return false;
  }


  /**
   * Метод проверяет, является ли пользователь админом с правами доступа к платежам
   *
   * @return boolean
   */
  public static function isOrdersAdmin() {
  	Service_Debug::setDebug();
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    if ($objUser->getField('is_admin') > 1) return true;
    else return false;
  }


  /**
   * Метод переправляет пользователя на другую страницу. В том, случае, если пользователь не имеет права на работу с материалом по типу сущности и его идентификатору
   * В противном случае возвращает идентификатор пользователя true
   *
   * @param mixed $essenceType
   * @param integer $essenceId
   * @param string $location
   * @param string $message
   */
  public static function moveToIfNotAvailableMaterial($essenceType, $essenceId, $location, $message = null) {
    if (! self::isAvailableMaterial($essenceType, $essenceId)) User_Session::moveTo($location, $message);
    return true;
  }

  /**
   * Метод переправляет пользователя на другую страницу. В том, случае, если пользователь не является автором или админом
   * В противном случае возвращает идентификатор пользователя
   *
   * @param integer $authorId
   * @param string $location
   * @param string $message
   */
  public static function moveToIfNotAuthorOrAdmin($authorId, $location, $message = null) {
    if (! self::isAuthorOrAdmin($authorId)) User_Session::moveTo($location, $message);
    return true;
  }

  /**
   * Метод переправляет пользователя на другую страницу. В том, случае, если пользователь не является гидом или админом
   * В противном случае возвращает идентификатор пользователя
   *
   * @param string $location
   * @param string $message
   */
  public static function moveToIfNotGuideOrAdmin($location, $message = null) {
    if (! self::isGuideOrAdmin()) User_Session::moveTo($location, $message);
    return true;
  }

  /**
   * Метод переправляет пользователя на другую страницу. В том, случае, если пользователь не является админом
   * В противном случае возвращает идентификатор пользователя
   *
   * @param string $location
   * @param string $message
   */
  public static function moveToIfNotAdmin($location, $message = null) {
    if (! self::isAdmin()) User_Session::moveTo($location, $message);
    return true;
  }


  /**
   * Метод проверяет, является ли пользователь владельцем гостиницы
   *
   * @return boolean
   */
  public static function isHotelOwner($ourHotelId = null) {
  	Service_Debug::setDebug();
    $objSession = User_Session::instance();
    if (! $objSession->isLoggedIn()) return false; // Если пользователь не залогинен
    $objUser = $objSession->getUser();
    if (intval($objUser->getField('hotel_owner_level'))) {
    	if ($ourHotelId) {
    	  $objDB = Service_Database::instance();
    	  $stmt = "SELECT `our_hotel`.`ID_our_hotel` FROM `our_hotel` WHERE `our_hotel`.`ID_our_hotel` = '" . $ourHotelId . "' AND `our_hotel`.`ID_hotel_owner` = '" . $objUser->id . "'";
    	  return $objDB->isRecordExist($stmt);
    	}
    	else return true;
    }
    else return false;
  } 
}